package com.reggie.service.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.reggie.acl.dataobject.Category;
import com.reggie.common.model.PageRequest;

import java.util.Collection;
import java.util.List;
import java.util.Optional;

/**
 * <p>
 * 菜品及套餐分类 服务类
 * </p>
 *
 * @author yth
 * @since 2023-02-04
 */
public interface CategoryService {

    /**
     * 分页查询<p>
     * 根据sort字段升序、updateTime字段降序排序
     *
     * @param request 请求
     * @return 分页数据
     */
    IPage<Category> page(PageRequest request);

    /**
     * 根据id，删除分类，删除失败则报错<p>
     * 如果有菜品或套装与这个分类关联，则报错
     *
     * @param id 菜品及套餐分类id
     */
    void removeById(long id);

    /**
     * 保存分类，保存失败则报错<p>
     * 分类的名称必须存在且唯一，否则报错
     *
     * @param category 分类数据
     */
    void save(Category category);

    /**
     * 根据id，更新分类信息，更新失败则报错
     *
     * @param category 分类数据
     */
    void updateById(Category category);

    /**
     * 根据分类的类型，查询集合数据<p>
     * type为null，则查询全部
     *
     * @param type 类型：1 菜品分类 2 套餐分类
     * @return 集合数据
     */
    List<Category> listByType(Integer type);


    /**
     * 根据id，查询
     *
     * @param id 分类id
     * @return 数据
     */
    Optional<Category> getById(Long id);

    /**
     * 根据id集合，查询
     *
     * @param ids id集合
     * @return 数据
     */
    List<Category> getByIds(Collection<Long> ids);
}
